/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.lujotar.ws;

import com.lujotar.ejb.MovimientoFacade;
import com.lujotar.ejb.TarjetaFacade;
import com.lujotar.ejb.TiendaFacade;
import com.lujotar.entities.Movimiento;
import com.lujotar.entities.Tarjeta;
import com.lujotar.entities.Tienda;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;

/**
 *
 * @author cfhoyoso
 */
@WebService(serviceName = "RegistroCompra")
@Stateless()
public class RegistroCompra {
   
    @EJB
    private TarjetaFacade tarjetaFacade;
    @EJB
    private TiendaFacade tiendaFacade;
    @EJB
    private MovimientoFacade movimientoFacade;
    
    private final static double PUNTO_FRACCION = 0.51;
  
    /**
     * Web service operation
     */
    @WebMethod(operationName = "adicionarCompra")
    public void adicionarCompra(@WebParam(name = "idTarjeta") String idTarjeta,@WebParam(name = "idTienda") String idTienda,  @WebParam(name = "valorCompra") double valorCompra) {
        
        //Recuperar la tarjeta
        List<Tarjeta> tarjetas = this.tarjetaFacade.consultarTarjetaId(idTarjeta);
        //Recuperar la tienda
        List<Tienda> tiendas = this.tiendaFacade.consultarTiendaId(idTienda);
        
        if (tarjetas.size() > 0 && tiendas.size() > 0) {
            Movimiento movimiento;
            int puntos = 0;
            double residuo;
                        
            movimiento = new Movimiento();
            
            movimiento.setIdTarjeta(tarjetas.get(0));
            movimiento.setIdTienda(tiendas.get(0));
            movimiento.setValor(valorCompra);
            movimiento.setFechaHora(new Date());
            
            puntos = (int)(valorCompra / 1);
            residuo = valorCompra % 1;
            
            if (RegistroCompra.PUNTO_FRACCION <= residuo) {
                puntos ++;
            }
            
            movimiento.setPuntos(puntos);
            movimientoFacade.crear(movimiento);                  
        }
               
    }

    /**
     * modificarCompra: Ingresa un movimiento con valor negativo
     */
    @WebMethod(operationName = "modificarCompra")
    public void modificarCompra(@WebParam(name = "idTarjeta") String idTarjeta,@WebParam(name = "idTienda") String idTienda, @WebParam(name = "valorModificacion") double valorModificacion) {
        
        //Recuperar la tarjeta
        List<Tarjeta> tarjetas = this.tarjetaFacade.consultarTarjetaId(idTarjeta);
        //Recuperar la tienda
        List<Tienda> tiendas = this.tiendaFacade.consultarTiendaId(idTienda);
        
        if (tarjetas.size() > 0 && tiendas.size() > 0) {
            Movimiento movimiento;
            int puntos = 0;
            double residuo;
                        
            movimiento = new Movimiento();
            
            movimiento.setIdTarjeta(tarjetas.get(0));
            movimiento.setIdTienda(tiendas.get(0));
            movimiento.setValor((-1) * valorModificacion);
            movimiento.setFechaHora(new Date());
            
            puntos = (int)(valorModificacion / 1);
            residuo = valorModificacion % 1;
            
            if (RegistroCompra.PUNTO_FRACCION <= residuo) {
                puntos ++;
            }
            
            movimiento.setPuntos((-1) * puntos);
            movimientoFacade.crear(movimiento);                  
        }
    }
}
